;
(function($){
    /**
 * jqGrid extension for manipulating columns properties
 * Piotr Roznicki roznicki@o2.pl
 * http://www.roznicki.prv.pl
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/
    $.jgrid.extend({
        setColumns : function(p) {
            p = $.extend({
                top : 0,
                left: 0,
                width: 200,
                height: 'auto',
                dataheight: 'auto',
                modal: false,
                drag: true,
                beforeShowForm: null,
                afterShowForm: null,
                afterSubmitForm: null,
                closeOnEscape : true,
                ShrinkToFit : false,
                jqModal : false,
                saveicon: [true,"left","ui-icon-disk"],
                closeicon: [true,"left","ui-icon-close"],
                onClose : null,
                colnameview : true,
                closeAfterSubmit : true,
                updateAfterCheck : false,
                recreateForm : false
            }, $.jgrid.col, p ||{});
            return this.each(function(){
                var $t = this;
                if (!$t.grid ) {
                    return;
                }
                var onBeforeShow = typeof p.beforeShowForm === 'function' ? true: false;
                var onAfterShow = typeof p.afterShowForm === 'function' ? true: false;
                var onAfterSubmit = typeof p.afterSubmitForm === 'function' ? true: false;			
                var gID = $t.p.id,
                dtbl = "ColTbl_"+gID,
                IDs = {
                    themodal:'colmod'+gID,
                    modalhead:'colhd'+gID,
                    modalcontent:'colcnt'+gID, 
                    scrollelm: dtbl
                };
                if(p.recreateForm===true && $("#"+IDs.themodal).html() != null) {
                    $("#"+IDs.themodal).remove();
                }
                if ( $("#"+IDs.themodal).html() != null ) {
                    if(onBeforeShow) {
                        p.beforeShowForm($("#"+dtbl));
                    }
                    $.jgrid.viewModal("#"+IDs.themodal,{
                        gbox:"#gbox_"+gID,
                        jqm:p.jqModal, 
                        jqM:false, 
                        modal:p.modal
                        });
                    if(onAfterShow) {
                        p.afterShowForm($("#"+dtbl));
                    }
                } else {
                	var i;
                    var dh = isNaN(p.dataheight) ? p.dataheight : p.dataheight+"px";
                    var formdata = "<div id='"+dtbl+"' class='formdata' style='width:100%;overflow:auto;position:relative;height:"+dh+";'>";
                    formdata += "<table class='ColTable' cellspacing='1' cellpading='2' border='0'><tbody>";
                    for(i=0;i<this.p.colNames.length;i++){
                        if(!$t.p.colModel[i].hidedlg) { // added from T. Tomov
                            formdata += "<tr><td style='white-space: pre;'><input type='checkbox' style='margin-right:5px;' id='col_" + this.p.colModel[i].name + "' class='cbox' value='T' " + 
                            ((this.p.colModel[i].hidden===false)?"checked":"") + "/>" +  "<label for='col_" + this.p.colModel[i].name + "'>" + this.p.colNames[i] + ((p.colnameview) ? " (" + this.p.colModel[i].name + ")" : "" )+ "</label></td></tr>";
                        }
                    }
                    formdata += "</tbody></table></div>";
                    var bS  = !p.updateAfterCheck ? "<a href='javascript:void(0)' id='dData' class='fm-button ui-state-default ui-corner-all'>"+p.bSubmit+"</a>" : "",
                    bC  ="<a href='javascript:void(0)' id='eData' class='fm-button ui-state-default ui-corner-all'>"+p.bCancel+"</a>";
                    formdata += "<table border='0' class='EditTable' id='"+dtbl+"_2'><tbody><tr style='display:block;height:3px;'><td></td></tr><tr><td class='DataTD ui-widget-content'></td></tr><tr><td class='ColButton EditButton'>"+bS+"&#160;"+bC+"</td></tr></tbody></table>";
                    p.gbox = "#gbox_"+gID;
                    $.jgrid.createModal(IDs,formdata,p,"#gview_"+$t.p.id,$("#gview_"+$t.p.id)[0]);
                    if(p.saveicon[0]==true) {
                        $("#dData","#"+dtbl+"_2").addClass(p.saveicon[1] == "right" ? 'fm-button-icon-right' : 'fm-button-icon-left')
                        .append("<span class='ui-icon "+p.saveicon[2]+"'></span>");
                    }
                    if(p.closeicon[0]==true) {
                        $("#eData","#"+dtbl+"_2").addClass(p.closeicon[1] == "right" ? 'fm-button-icon-right' : 'fm-button-icon-left')
                        .append("<span class='ui-icon "+p.closeicon[2]+"'></span>");
                    }
                    if(!p.updateAfterCheck) {
                        $("#dData","#"+dtbl+"_2").click(function(e){
                            for(i=0;i<$t.p.colModel.length;i++){
                                if(!$t.p.colModel[i].hidedlg) { // added from T. Tomov
                                    var nm = $t.p.colModel[i].name.replace(/\./g, "\\.");
                                    if($("#col_" + nm,"#"+dtbl).attr("checked")) {
                                        $($t).jqGrid("showCol",$t.p.colModel[i].name);
                                        $("#col_" + nm,"#"+dtbl).attr("defaultChecked",true); // Added from T. Tomov IE BUG
                                    } else {
                                        $($t).jqGrid("hideCol",$t.p.colModel[i].name);
                                        $("#col_" + nm,"#"+dtbl).attr("defaultChecked",""); // Added from T. Tomov IE BUG
                                    }
                                }
                            }
                            if(p.ShrinkToFit===true) {
                                $($t).jqGrid("setGridWidth",$t.grid.width-0.001,true);
                            }
                            if(p.closeAfterSubmit) $.jgrid.hideModal("#"+IDs.themodal,{
                                gb:"#gbox_"+gID,
                                jqm:p.jqModal, 
                                onClose: p.onClose
                                });
                            if (onAfterSubmit) {
                                p.afterSubmitForm($("#"+dtbl));
                            }
                            return false;
                        });
                    } else {
                        $(":input","#"+dtbl).click(function(e){
                            var cn = this.id.substr(4);
                            if(cn){
                                if(this.checked) {
                                    $($t).jqGrid("showCol",cn);
                                } else {
                                    $($t).jqGrid("hideCol",cn);
                                }
                                if(p.ShrinkToFit===true) {
                                    $($t).jqGrid("setGridWidth",$t.grid.width-0.001,true);
                                }
                            }
                            return this;
                        });
                    }
                    $("#eData", "#"+dtbl+"_2").click(function(e){
                        $.jgrid.hideModal("#"+IDs.themodal,{
                            gb:"#gbox_"+gID,
                            jqm:p.jqModal, 
                            onClose: p.onClose
                            });
                        return false;
                    });
                    $("#dData, #eData","#"+dtbl+"_2").hover(
                        function(){
                            $(this).addClass('ui-state-hover');
                        }, 
                        function(){
                            $(this).removeClass('ui-state-hover');
                        }
                        );				
                    if(onBeforeShow) {
                        p.beforeShowForm($("#"+dtbl));
                    }
                    $.jgrid.viewModal("#"+IDs.themodal,{
                        gbox:"#gbox_"+gID,
                        jqm:p.jqModal, 
                        jqM: true, 
                        modal:p.modal
                        });
                    if(onAfterShow) {
                        p.afterShowForm($("#"+dtbl));
                    }
                }
            });
        }
    });
})(jQuery);